在zkevm 證明環境中,狀態證明協助核實所有隨機讀寫訪問記錄的有效性。讓我們深入了解其工作原理及其重要的細節。
狀態證明主要保持 EVM 證明的隨機訪問數據的讀寫部分。涵蓋了以下操作:
Start
: 交易的開始和填充行Memory
: 呼叫的內存,表現為字節數組Stack
: 以RLC編碼的詞組成的呼叫堆棧Storage
: 帳戶的存儲,表現為鍵值映射CallContext
: 一個呼叫的上下文Account
: 帳戶的狀態(nonce,餘額,代碼哈希)TxRefund
: 退還給交易發送者的值TxAccessListAccount
: 帳戶訪問列表的狀態TxAccessListAccountStorage
: 帳戶存儲訪問列表的狀態TxLog
: 交易日誌的狀態TxReceipt
: 交易收據的狀態每個操作使用不同的參數進行索引。在數據中,所有表鍵的連接變成數據的唯一索引。每條記錄都將附加一個 ReadWriteCounter
,並且記錄首先按其唯一索引分組,然後按其ReadWriteCounter
增加排序。
電路的約束分為兩組:
關於 Memory
、Stack
、Storage
等不同區段有各自的特定約束條件。具體的條件可以參考上文的描述(例如Memory有:value
是字節、initial_value
是0、state root
保持一致等)。
所有帳戶和存儲的讀寫訪問都與 Merkle Patricia Trie (MPT) Circuit 鏈接。這是因為不同於每個區塊中初始化為0的其餘條目,帳戶和存儲通過以太坊狀態和存儲Tries在區塊之間持久存在。一般來說,我們將每個鍵的第一次和最後一次訪問鏈接到使用鏈接根的MPT證明。
請注意,使用MPT證明連接帳戶和存儲訪問需要分別處理存在/不存在的情況。
狀態證明在智能合約和區塊鏈技術中扮演著核心角色,它不僅僅是對資料的讀寫進行證明,更是維護著整個系統的穩定和正確運作。